/*
 * Copyright (c) 2024 Termony Co., Ltd. All rights reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifdef LOSCFG_DRIVERS_HDF_CONFIG_MACRO
#include "hcs_macro.h"
#include "hdf_config_macro.h"
#else
#include "device_resource_if.h"
#endif

#include "hdf_vuart.h"
#include "hdf_base.h"
#include "hdf_log.h"

#ifdef LOG_TAG
#undef LOG_TAG
#endif
#define LOG_TAG "VUART_HCS"

#ifdef LOSCFG_DRIVERS_HDF_CONFIG_MACRO
int32_t HDF_VuartHostParser(struct UartHost *host, struct HdfDeviceObject *device)
{
    return HDF_FAILURE;
}
#else
int32_t HDF_VuartHostParser(struct UartHost *host, struct HdfDeviceObject *device)
{
    uint32_t value;
    struct VuartCb *vuartCb = (struct VuartCb *)host->priv;
    struct DeviceResourceIface *dri = DeviceResourceGetIfaceInstance(HDF_CONFIG_SOURCE);
    if (dri == NULL || dri->GetString == NULL || dri->GetUint32 == NULL || dri->GetUint8 == NULL) {
        HDF_LOGE("%s: The DeviceResourceGetIfaceInstance is failed.", __func__);
        return HDF_ERR_INVALID_PARAM;
    }

    if (device->property == NULL) {
        HDF_LOGE("%s: device->property is NULL.", __func__);
        return HDF_FAILURE;
    }

    if (dri->GetUint32(device->property, "hostId", &(host->num), 0) != HDF_SUCCESS) {
        HDF_LOGE("%s: Read 'hostId' is failed.", __func__);
        return HDF_FAILURE;
    }

    if (dri->GetString(device->property, "name", &(vuartCb->cfg.name), 0) != HDF_SUCCESS) {
        HDF_LOGE("%s: Read 'name' is failed.", __func__);
        return HDF_FAILURE;
    }

    return HDF_SUCCESS;
}
#endif